using System;
using System.ServiceModel;
using Sinacor.Infra.Service.Security.Services;
using System.Collections.Generic;
using Sinacor.Infra.Common;
using System.Text;
using Sinacor.Infra.Service.Common;

namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.ServiceImplementation.Translator.DataContractToBusinessEntity
{
	public class Justificativa 
    {
		public Justificativa(){}

		public BusinessEntity.ChaveOrdem ToChaveOrdem(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.ChaveOrdemRequest from)
        {
            BusinessEntity.ChaveOrdem retorno = new BusinessEntity.ChaveOrdem();

            if (from == null)
                return null;

            retorno.DataOrdem = from.DataOrdem;
            retorno.NumeroOrdem = from.NumeroOrdem;
            retorno.NumeroOrdemSubSequencia = from.NumeroOrdemSubSequencia;

            return retorno;
		}

        public BusinessEntity.Justificativa ToJustificativa(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.JustificativaRequest from)
        {
            BusinessEntity.Justificativa retorno = new BusinessEntity.Justificativa();

            if (from == null)
                return null;

            retorno.ApelidoCliente = from.ApelidoCliente;
            retorno.Ativo = from.Ativo;
            retorno.Codigo = from.Codigo;
            retorno.CodigoUsuario = from.CodigoUsuario;
            retorno.DataAlteracao = from.DataAlteracao;
            retorno.DataOrdem = from.DataOrdem;
            retorno.DataHoraOrdem = from.DataHoraOrdem;
            retorno.JustificativaOrdem = from.Justificativa;

            switch (from.NaturezaOperacao)
            {
                case Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Enum.NaturezaOperacao.Compra:
                    retorno.NaturezaOperacao = Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessEntity.Enum.NaturezaOperacao.Compra;
                    break;
                case Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Enum.NaturezaOperacao.Venda:
                    retorno.NaturezaOperacao = Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessEntity.Enum.NaturezaOperacao.Venda;
                    break;
                case Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Enum.NaturezaOperacao.CompraVenda:
                    retorno.NaturezaOperacao = Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessEntity.Enum.NaturezaOperacao.CompraVenda;
                    break;
            }

            retorno.NumeroOrdem = from.NumeroOrdem;
            retorno.NumeroSubSequenciaOrdem = from.NumeroSubSequenciaOrdem;
            retorno.PendenteMensageria = from.PendenteMensageria;

            return retorno;
        }

        public List<BusinessEntity.Justificativa> ToJustificativa(List<Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.JustificativaRequest> from)
        {
            List<BusinessEntity.Justificativa> lista = new List<BusinessEntity.Justificativa>();
            BusinessEntity.Justificativa item = null;

            if (from == null)
                return null;

            foreach (Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.JustificativaRequest inLista in from)
            {
                item = this.ToJustificativa(inLista);
                lista.Add(item);
            }

            return lista;
        }


        public BusinessEntity.Parameter.FiltroJustificativa ToFiltroJustificativa(Service.DataContract.Request.FiltroJustificativa from)
        {
            BusinessEntity.Parameter.FiltroJustificativa to = null;

            if (from != null)
            {
                to = new BusinessEntity.Parameter.FiltroJustificativa();

                to.Codigo = from.Codigo;
                to.DataOrdem = from.DataOrdem;
                to.NumeroOrdem = from.NumeroOrdem;
                to.NumeroOrdemSubSequencia = from.NumeroOrdemSubSequencia;
            }

            return to;
        }
    }
}